准备工作
ida打开,有反调试,nop掉,或者将时间改成很长
安全保护措施,可以写got表
寻找漏洞,free会将判断变量置0,不存在double free
那么同样也不存在uaf漏洞
edit的时候,size没有限制,可堆溢出
这种没有输出什么的程序,代码可以写得相当潇洒
unlink
乍一看,没有输出函数啊,怎么泄露呢
后来想了想,没有输出函数,创造条件也要构造啊
可以改写strlen为puts,printf什么的
那么就可以将2的指针改了
跟着我们就可以通过操作2来覆盖1,利用1去写,再去读什么的
这里我写strlen的got表为plt_printf,这样就相当于构造了格式化字符串漏洞,不过有任意地址读写,就不用这个了,不过我看到有人用这个进行泄露的
之后通过下面的leak函数泄露即可
使用pwntools的DynELF泄露system地址
最后将atoi的got表改了
最终结果
完整exp
1 | # -*- coding: utf-8 -*- |
另外的overwrite目标
有人将free改成puts,printf,其实也是可以的,
最后写system的时候也可以将free改回system